﻿// B. Permutations & Primes.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1844/B

给你一个正整数 n。

在这个问题中，整数集合 c1，c2，...，ck 的 MEX 定义为在集合 c 中不出现的最小正整数 x。

数组 a1，...，an 的原始性定义为：1≤l≤r≤n 且 MEX(al,...ar) 是质数的数对 (l,r) 的个数。

在 1，2，...，n 的所有排列中，找出具有最大可能素数的 1，2，...，n 的任何排列。

注意
质数是指大于或等于 2 的数，它不能被除 1 和它本身以外的任何正整数。例如，2、5、13 是质数，但 1 和 6 不是质数。
1,2,......,n的排列是一个数组，由从1到n的n个不同的整数按任意顺序排列而成。例如，[2,3,1,5,4] 是一个排列，
但 [1,2,2] 不是排列（2 在数组中出现了两次），[1,3,4] 也不是排列（n=3 但数组中有 4）。
输入
每个测试包含多个测试用例。第一行包含测试用例数 t（1≤t≤104）。下面是测试用例的说明。

每个测试用例的唯一一行包含一个整数 n（1≤n≤2⋅105）。

保证所有测试用例的 n 之和不超过 2⋅105。

输出
对于每个测试用例，输出 n 个整数：1,2,...,n 的排列组合。的排列组合。
如果有多个解决方案，则打印其中任何一个。

InputCopy
3
2
1
5
OutputCopy
2 1
1
5 2 1 4 3

说明
在第一个测试案例中，有 3 对 (l,r) 的 1≤l≤r≤2
的 3 对 (l,r)，其中 2 对的质数为 MEX(al,...,ar)：

(l,r)=(1,1)： MEX(2)=1，不是质数。
(l,r)=(1,2)： MEX(2,1)=3，是质数。
(l,r)=(2,2)： MEX(1)=2，为质数。因此，质数为 2。
在第二个测试案例中，MEX(1)=2 是质数，因此原始性为 1。
在第三个测试案例中，可能的最大基数是 8。


*/
#include <iostream>
#include <cstring>

using namespace std;

const int N = 200010;
int a[N];
int T;

void solve() {
	int n;
	cin >> n;
	memset(a, 0, sizeof a);

	int m = n / 2;
	int l = 0; int r = n - 1;
	a[m] = 1;
	int curr = 1;
	while (l < r) {
		if(l!=m)
			a[l] = ++curr;
		if(r!=m)
			a[r] = ++curr;
		l++, r--;
	}

	for (int i = 0; i < n; i++) {
		cout << a[i] << " ";
	}
	cout << endl;

	return;
}


int main()
{
	cin >> T;
	while (T--) {
		solve();
	}

	return 0;
}

 